package com.qpkj.oms.service.impl;

import java.util.List;

import com.qpkj.common.constant.UserConstants;
import com.qpkj.common.core.domain.entity.SysDept;
import com.qpkj.common.core.domain.entity.SysMenu;
import com.qpkj.common.utils.DateUtils;
import com.qpkj.common.utils.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qpkj.oms.mapper.OmsProductCategoryMapper;
import com.qpkj.oms.domain.OmsProductCategory;
import com.qpkj.oms.service.IOmsProductCategoryService;

/**
 * 物料分类Service业务层处理
 *
 * @author ruoyi
 * @date 2022-12-20
 */
@Service
public class OmsProductCategoryServiceImpl implements IOmsProductCategoryService {
    @Autowired
    private OmsProductCategoryMapper omsProductCategoryMapper;

    /**
     * 查询物料分类
     *
     * @param categoryId 物料分类主键
     * @return 物料分类
     */
    @Override
    public OmsProductCategory selectOmsProductCategoryByCategoryId(Long categoryId) {
        return omsProductCategoryMapper.selectOmsProductCategoryByCategoryId(categoryId);
    }

    @Override
    public OmsProductCategory selectOmsProductCategoryByCategoryName(String categoryName) {
        return omsProductCategoryMapper.selectOmsProductCategoryByCategoryName(categoryName);
    }

    /**
     * 查询物料分类列表
     *
     * @param omsProductCategory 物料分类
     * @return 物料分类
     */

    @Override
    public List<OmsProductCategory> selectOmsProductCategoryList(OmsProductCategory omsProductCategory) {
        OmsProductCategory category = new OmsProductCategory();
        category.setParentId(0L);
        List<OmsProductCategory> parentList = omsProductCategoryMapper.selectOmsProductCategoryList(category);
        if (!ObjectUtils.isEmpty(parentList)) {
            parentList.forEach(omsProductCategory1 -> {
                List<OmsProductCategory> childList = omsProductCategoryMapper.getCategoryByParentId(omsProductCategory1);
                if (!ObjectUtils.isEmpty(childList)) {
                    omsProductCategory1.setChildren(childList);
                }
            });
        }
        return parentList;
    }

    /**
     * 新增物料分类
     *
     * @param omsProductCategory 物料分类
     * @return 结果
     */
    @Override
    public int insertOmsProductCategory(OmsProductCategory omsProductCategory) {

        if(omsProductCategory.getParentId()==0){
            return omsProductCategoryMapper.insertOmsProductCategory(omsProductCategory);
        }
        OmsProductCategory category = omsProductCategoryMapper.selectOmsProductCategoryByCategoryId(omsProductCategory.getParentId());
        omsProductCategory.setAncestors(category.getAncestors() + "," + omsProductCategory.getParentId());
        omsProductCategory.setCreateTime(DateUtils.getNowDate());
        return omsProductCategoryMapper.insertOmsProductCategory(omsProductCategory);
    }

    /**
     * 修改物料分类
     *
     * @param omsProductCategory 物料分类
     * @return 结果
     */
    @Override
    public int updateOmsProductCategory(OmsProductCategory omsProductCategory) {
        OmsProductCategory newParentCategory = omsProductCategoryMapper.selectOmsProductCategoryByCategoryId(omsProductCategory.getParentId());
        OmsProductCategory oldCategory = omsProductCategoryMapper.selectOmsProductCategoryByCategoryId(omsProductCategory.getCategoryId());
        if (StringUtils.isNotNull(newParentCategory) && StringUtils.isNotNull(oldCategory)) {
            String newAncestors = newParentCategory.getAncestors() + "," + newParentCategory.getCategoryId();
            String oldAncestors = oldCategory.getAncestors();
            omsProductCategory.setAncestors(newAncestors);
            updateCategoryChildren(omsProductCategory.getCategoryId(), newAncestors, oldAncestors);
        }
        omsProductCategory.setUpdateTime(DateUtils.getNowDate());
        return omsProductCategoryMapper.updateOmsProductCategory(omsProductCategory);
    }

    public void updateCategoryChildren(Long categoryId, String newAncestors, String oldAncestors) {
        List<OmsProductCategory> children = omsProductCategoryMapper.selectChildrenCategoryById(categoryId);
        for (OmsProductCategory child : children) {
            child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
        }
        if (children.size() > 0) {
            omsProductCategoryMapper.updateCategoryChildren(children);
        }
    }

    /**
     * 批量删除物料分类
     *
     * @param categoryIds 需要删除的物料分类主键
     * @return 结果
     */
    @Override
    public int deleteOmsProductCategoryByCategoryIds(Long[] categoryIds) {
        return omsProductCategoryMapper.deleteOmsProductCategoryByCategoryIds(categoryIds);
    }

    /**
     * 删除物料分类信息
     *
     * @param categoryId 物料分类主键
     * @return 结果
     */
    @Override
    public int deleteOmsProductCategoryByCategoryId(Long categoryId) {
        return omsProductCategoryMapper.deleteOmsProductCategoryByCategoryId(categoryId);
    }

    @Override
    public String checkNameUnique(OmsProductCategory omsProductCategory) {
        Long categoryId = StringUtils.isNull(omsProductCategory.getCategoryId()) ? -1L : omsProductCategory.getCategoryId();
        OmsProductCategory info = omsProductCategoryMapper.checkNameUnique(omsProductCategory.getCategoryName(), omsProductCategory.getParentId());
        if (StringUtils.isNotNull(info) && info.getCategoryId().longValue() != categoryId.longValue()) {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public List<OmsProductCategory> getCategoryByParentId(OmsProductCategory omsProductCategory) {
        return omsProductCategoryMapper.getCategoryByParentId(omsProductCategory);
    }
}
